home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / X-Ray / Includes / X_Ray_Priv.h next >
Encoding:
Text File  |  1999-06-17  |  12.7 KB  |  323 lines  |  [TEXT/CWIE]

  1. // Copyright (C) 1999 Eric Roccasecca.  All rights reserved.
  2.  
  3. #include <Sound.h>
  4. #include <QDOffscreen.h>
  5. #include <TextServices.h>
  6.  
  7. #include "X_Ray.h"
  8. #include "Layers.h"
  9.  
  10. enum
  11. {
  12.     kStdLineProcInfo = kPascalStackBased
  13.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Point))),
  14.     kStdRectProcInfo = kPascalStackBased
  15.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
  16.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*))),
  17.     kStdRgnProcInfo = kPascalStackBased
  18.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
  19.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(RgnHandle))),
  20.     kStdOvalProcInfo = kPascalStackBased
  21.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
  22.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*))),
  23.     kStdRRectProcInfo = kPascalStackBased
  24.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
  25.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
  26.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
  27.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(short))),
  28.     kStdArcProcInfo = kPascalStackBased
  29.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
  30.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
  31.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
  32.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(short))),
  33.     kStdPolyProcInfo = kPascalStackBased
  34.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
  35.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(PolyHandle))),
  36.     kStdBitsProcInfo = kPascalStackBased
  37.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
  38.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
  39.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*)))
  40.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(short)))
  41.                 | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(RgnHandle))),
  42.     kCopyBitsProcInfo = kPascalStackBased
  43.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
  44.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(BitMap*)))
  45.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*)))
  46.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
  47.                 | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(short)))
  48.                 | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(RgnHandle))),
  49.     kCopyDeepMaskProcInfo = kPascalStackBased
  50.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
  51.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(BitMap*)))
  52.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(BitMap*)))
  53.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
  54.                 | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(Rect*)))
  55.                 | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(Rect*)))
  56.                 | STACK_ROUTINE_PARAMETER(7,SIZE_CODE(sizeof(short)))
  57.                 | STACK_ROUTINE_PARAMETER(8,SIZE_CODE(sizeof(RgnHandle))),
  58.     kCopyMaskProcInfo = kPascalStackBased
  59.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
  60.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(BitMap*)))
  61.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(BitMap*)))
  62.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
  63.                 | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(Rect*)))
  64.                 | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(Rect*))),
  65.     kScrollRectProcInfo = kPascalStackBased
  66.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Rect*)))
  67.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
  68.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
  69.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(RgnHandle))),
  70.     kStdTextProcInfo = kPascalStackBased
  71.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(short)))
  72.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(void*)))
  73.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Point*)))
  74.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Point*))),
  75.     kMoveWindowProcInfo = kPascalStackBased
  76.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
  77.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
  78.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
  79.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Boolean))),
  80.     kCloseWindowProcInfo = kPascalStackBased
  81.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
  82.     kSizeWindowProcInfo = kPascalStackBased
  83.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
  84.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
  85.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
  86.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Boolean))),
  87.     kGrowWindowProcInfo = kPascalStackBased
  88.                 | RESULT_SIZE (SIZE_CODE(sizeof(long)))
  89.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
  90.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Point)))
  91.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*))),
  92.     kHideWindowProcInfo = kPascalStackBased
  93.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
  94.     kShowWindowProcInfo = kPascalStackBased
  95.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
  96.     kShowHideProcInfo = kPascalStackBased
  97.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
  98.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Boolean))),
  99.     kBringToFrontProcInfo = kPascalStackBased
  100.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
  101.     kSelectWindowProcInfo = kPascalStackBased
  102.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
  103.     kDragWindowProcInfo = kPascalStackBased
  104.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
  105.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Point)))
  106.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*))),
  107.     kZoomWindowProcInfo = kPascalStackBased
  108.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
  109.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
  110.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Boolean))),
  111.     kSendBehindProcInfo = kPascalStackBased
  112.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
  113.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(WindowPtr))),
  114.     kDragGrayRgnProcInfo = kPascalStackBased
  115.                 | RESULT_SIZE (SIZE_CODE(sizeof(long)))
  116.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(RgnHandle)))
  117.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Point)))
  118.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*)))
  119.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
  120.                 | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(short)))
  121.                 | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(long))),
  122.     kFindWindowProcInfo = kPascalStackBased
  123.                 | RESULT_SIZE (SIZE_CODE(sizeof(short)))
  124.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Point)))
  125.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(WindowPtr*))),
  126.     kInitWindowsProcInfo = kPascalStackBased,
  127.     kNewPtrProcInfo = kRegisterBased
  128.                 | RESULT_SIZE(SIZE_CODE(sizeof(Ptr)))
  129.                 | REGISTER_RESULT_LOCATION(kRegisterA0)
  130.                 | REGISTER_ROUTINE_PARAMETER(1, kRegisterD1,SIZE_CODE(sizeof(long)))
  131.                 | REGISTER_ROUTINE_PARAMETER(2, kRegisterD0,SIZE_CODE(sizeof(Size))),
  132.     kNewWindowProcInfo = kPascalStackBased
  133.                 | RESULT_SIZE (SIZE_CODE(sizeof(WindowPtr)))
  134.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(void*)))
  135.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
  136.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(char*)))
  137.                 | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Boolean)))
  138.                 | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(short)))
  139.                 | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(WindowPtr)))
  140.                 | STACK_ROUTINE_PARAMETER(7,SIZE_CODE(sizeof(Boolean)))
  141.                 | STACK_ROUTINE_PARAMETER(8,SIZE_CODE(sizeof(long))),
  142.     kGetNewWindowProcInfo = kPascalStackBased
  143.                 | RESULT_SIZE (SIZE_CODE(sizeof(WindowPtr)))
  144.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(short)))
  145.                 | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(void*)))
  146.                 | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(WindowPtr)))
  147. };
  148.  
  149.  
  150. enum {
  151.     kTransparencyOpaque            = 0x0000,
  152.     kTransparencyClear            = 0xFFFF,
  153.     
  154.     kTransparencyNormal            = 0xA000,
  155.     
  156.     kTransparencyFadeIncrement    = 0x2500
  157. };
  158.  
  159. typedef struct X_Ray_AppRec    **X_Ray_AppRecHandle;
  160. typedef struct X_Ray_Window    **X_Ray_WindowHandle;
  161.  
  162. typedef struct X_Ray_Window {
  163.     X_Ray_WindowHandle        previousWindow;
  164.     WindowPtr                theWindow;
  165.     long                    windowKind;
  166.     X_Ray_AppRecHandle        owner;
  167.     unsigned short            transparency;
  168.     unsigned short            normalTransparency;
  169.     RGBColor                clearColor;
  170.     GWorldPtr                underBuffer;
  171.     GWorldPtr                contentBuffer;
  172.     GWorldPtr                mixBuffer;
  173.     GWorldPtr                maskBuffer;
  174.     RgnHandle                transparentUpdateRgn;
  175.     RgnHandle                transparentRgn;
  176.     Handle                    origWDEF;
  177.     X_Ray_WindowHandle        nextWindow;
  178. } X_Ray_Window, **X_Ray_WindowHandle;
  179.  
  180.  
  181. typedef struct X_Ray_AppRec {
  182.     X_Ray_AppRecHandle        previousApp;
  183.     ProcessSerialNumber        appSerialNum;
  184.     LayerPtr                appGlobalWindow;
  185.     UniversalProcPtr        appInitWindows;
  186.     Boolean                    appWindowsAreInited;
  187.     Str63                    name;
  188.     long                    mode;  // as in background only, etc.
  189.     X_Ray_WindowHandle        windowList;
  190.     X_Ray_WindowHandle        lastWindow;
  191.     X_Ray_AppRecHandle        nextApp;
  192. } X_Ray_AppRec, **X_Ray_AppRecHandle;
  193.  
  194.  
  195. // X_Ray_CommRec is used for communication back and forth between the extension and X_RayLib
  196. typedef struct X_Ray_CommRec {
  197.     Handle                    wdefStub;    // pseudo WDEF for patching real WDEFs so they behave like
  198.                                         // transparent windows
  199.     X_Ray_WindowHandle        tsmWindowList;
  200.     X_Ray_WindowHandle        tsmLastWindow;
  201.     X_Ray_AppRecHandle        appList;
  202. } X_Ray_CommRec, *X_Ray_CommRecPtr, **X_Ray_CommRecHandle;
  203.  
  204. extern X_Ray_CommRec            gCommRec;
  205.  
  206.  
  207. typedef struct X_Ray_WDEFRec {
  208.     RoutineDescriptor    wdefProc;
  209. } X_Ray_WDEFRec, *X_Ray_WDEFPtr, **X_Ray_WDEFHandle;
  210.  
  211.  
  212. typedef struct X_Ray_IntersectRec    **X_Ray_IntersectHandle;
  213. typedef struct X_Ray_IntersectRec {
  214.     X_Ray_WindowHandle        theWindow;
  215.     X_Ray_IntersectHandle    nextIntersect;
  216. } X_Ray_IntersectRec, *X_Ray_IntersectPtr, **X_Ray_IntersectHandle;
  217.  
  218.  
  219. // feature kinds for X_Ray_GetWindowFeature
  220. enum {
  221.     kTransWindowUnderBuffer,
  222.     kTransWindowContentBuffer,
  223.     kTransWindowMixBuffer,
  224.     kTransWindowTransparency,
  225.     kX_RayWindowKind,
  226.     kClearWindowClearColor,
  227.     kTransWindowOwner,
  228.     kTransWindowStandardWDEF
  229. };
  230.  
  231.  
  232. // transparent window kind/flags
  233. enum {
  234.     kTSMWindow =        1L << 0,
  235.     kAppWindow =        1L << 1,
  236.     kAppDialog =        1L << 2,
  237.     kIsClear =            1L << 8,
  238.     kWindowDisposed =    1L << 31,
  239. };
  240.  
  241.  
  242. // reorder methods
  243. enum {
  244.     kROMethod_BringToFront,
  245.     kROMethod_SendBehind,
  246.     kROMethod_MoveWindow,
  247.     kROMethod_DragWindow,
  248.     kROMethod_HideWindow,
  249.     kROMethod_ShowHide,
  250.     kROMethod_SelectWindow
  251. };
  252.  
  253.  
  254. // Patch Prototypes
  255. Boolean InitInternalWindowManager (void);
  256. Boolean InitInternalQuickDraw (void);
  257.  
  258. // WDEF
  259. pascal long X_Ray_WDEF (short varCode, WindowPeek window, short message, long param);
  260. X_Ray_WindowHandle    X_Ray_GetTransparentWindowRec (WindowPtr theWindow);
  261. void X_Ray_BuildWDEF (void);
  262.  
  263. // X_Ray Protos
  264. long X_Ray_GetWindowFeature (WindowPtr theWindow, short kFeatureKind);
  265. X_Ray_WindowHandle PortDoesIntersect (GrafPtr thePort, RgnHandle drawRgn);
  266. Boolean PortIsOnScreen (GrafPtr thePort);
  267. Boolean BitMapIsOnScreen (const BitMap *theBMap);
  268. void ReorderWindow (X_Ray_WindowHandle, short, WindowPtr);
  269. X_Ray_AppRecHandle WindowIsGlobalAppWindow (WindowPtr theWindow);
  270. void X_Ray_FixOwningListEnds (X_Ray_WindowHandle theWindow);
  271. void AssureOldWindowLocationIsRefreshed (WindowPtr theWindow, RgnHandle oldStrucRgn);
  272. void AssureMovingWindowIsRefreshed (WindowPtr theWindow);
  273. void AssureUpdateForTransparent (WindowPtr theWindow);
  274.  
  275. #ifndef WINDOWLIBCOMPILE
  276.  
  277. OSErr X_Ray_DisposeWindow (X_Ray_WindowHandle deadWin);
  278. X_Ray_WindowHandle X_Ray_GetWindowRec (WindowPtr theWindow);
  279. void X_Ray_CheckAndFixWindowListHead (X_Ray_WindowHandle deadWin);
  280. X_Ray_WindowHandle GetNextWindowAbove (X_Ray_WindowHandle theWindow);
  281. X_Ray_WindowHandle GetNextWindowBehind (X_Ray_WindowHandle theWindow);
  282. WindowPtr GetNextNormalWindow (WindowPtr theWindow, X_Ray_AppRecHandle *curApp);
  283. void DumpTransparentWindowList (void);
  284.  
  285. #endif
  286.  
  287.  
  288. // App Prototypes
  289. X_Ray_AppRecHandle RememberApp (void);
  290. void ForgetApp (void);
  291. X_Ray_AppRecHandle GetCurrentAppRec (void);
  292. void PurgeDeadAppWindows (X_Ray_AppRecHandle deletedApp);
  293. RgnHandle ReorderApp (X_Ray_AppRecHandle theApp, short reorderMethod);
  294. UniversalProcPtr GetLocalTrap (long trapNum);
  295. Boolean AppInitWindowsState (void);
  296. void SetAppGlobalWindow (WindowPtr theAppGWindow);
  297. void CleanAppList();
  298.  
  299. // Menu Protos
  300. Boolean ApplyMenuPatches (void);
  301.  
  302. // Frame Window Prototypes
  303. Boolean X_Ray_ShareWindow (WindowPtr sharedWin);
  304. void X_Ray_MonitorFrameWindows (void);
  305. void X_Ray_DisposeAllFrames (void);
  306. void X_Ray_DisposeSharedWindow (X_Ray_WindowHandle curWindow, Boolean ownerDied);
  307. X_Ray_WindowHandle X_Ray_FindIfTransparent (WindowPtr testWindow);
  308. X_Ray_WindowHandle X_Ray_FindIfFrame (WindowPtr testWindow);
  309. void X_Ray_RememberSharedWindowStructRect (X_Ray_WindowHandle theWindow);
  310.  
  311. // Utility Functions Prototypes
  312. void DebugNum (long bugNum);
  313. void NumToHexString (long number, StringPtr string);
  314. Boolean isPressed (unsigned short key);
  315. void X_Ray_NormalizeRect (Rect *theRect);
  316. void X_Ray_LocalToGlobalRect (Rect *theRect);
  317. void X_Ray_GlobalToLocalRect (Rect *theRect);
  318. void X_Ray_LocalToGlobalPoly (PolyHandle thePoly);
  319. void X_Ray_GlobalToLocalPoly (PolyHandle thePoly);
  320. void X_Ray_LocalToGlobalRgn (RgnHandle theRgn);
  321. void X_Ray_GlobalToLocalRgn (RgnHandle theRgn);
  322. void ConfirmRgn (RgnHandle theRgn);
  323.